#ifdef CX_HAL_TIMER_ENABLE_INTERRUPT_MANAGER
#include "hal_timer.h"
#endif

#ifdef CX_HAL_TIMER_ENABLE_INTERRUPT_MANAGER
extern timer_intr_cb_t intr_tmr1, intr_tmr2, intr_tmr3, intr_tmr4, intr_tmr5, intr_tmr9, intr_tmr10, intr_tmr11;
#endif

#ifdef CX_HAL_TIMER_ENABLE_INTERRUPT_MANAGER

#define TMR_INTR_FLAG_CHECK_UPDATE(tmrx) \
if(tmr_interrupt_flag_get(TMR##tmrx, TMR_OVF_FLAG) != RESET) \
{ \
    intr_tmr##tmrx.member.update(TMR##tmrx); \
    tmr_flag_clear(TMR##tmrx, TMR_OVF_FLAG); \
} 

#define TMR_INTR_FLAG_CHECK_HALL(tmrx) \
if(tmr_interrupt_flag_get(TMR##tmrx, TMR_HALL_FLAG) != RESET) \
{ \
    intr_tmr##tmrx.member.hall(TMR##tmrx); \
    tmr_flag_clear(TMR##tmrx, TMR_HALL_FLAG); \
} 

#define TMR_INTR_FLAG_CHECK_TRIG(tmrx) \
if(tmr_interrupt_flag_get(TMR##tmrx, TMR_TRIGGER_FLAG) != RESET) \
{ \
    intr_tmr##tmrx.member.trigger(TMR##tmrx); \
    tmr_flag_clear(TMR##tmrx, TMR_TRIGGER_FLAG); \
} 

void TMR1_OVF_TMR10_IRQHandler(void)
{
    TMR_INTR_FLAG_CHECK_UPDATE(1);
    TMR_INTR_FLAG_CHECK_UPDATE(10);
    TMR_INTR_FLAG_CHECK_TRIG(10);
    TMR_INTR_FLAG_CHECK_HALL(10);
}

void TMR1_BRK_TMR9_IRQHandler(void)
{
    if(tmr_interrupt_flag_get(TMR1, TMR_BRK_INT) != RESET)
    {
        intr_tmr1.member.update(TMR1);
    } 
    TMR_INTR_FLAG_CHECK_UPDATE(9);
    TMR_INTR_FLAG_CHECK_TRIG(9);
    TMR_INTR_FLAG_CHECK_HALL(9);
}

void TMR1_TRG_HALL_TMR11_IRQHandler(void)
{
    TMR_INTR_FLAG_CHECK_TRIG(1);
    TMR_INTR_FLAG_CHECK_HALL(1);
    TMR_INTR_FLAG_CHECK_UPDATE(11);
    TMR_INTR_FLAG_CHECK_TRIG(11);
    TMR_INTR_FLAG_CHECK_HALL(11);
}

void TMR2_GLOBAL_IRQHandler(void)
{
    TMR_INTR_FLAG_CHECK_UPDATE(2);
    TMR_INTR_FLAG_CHECK_TRIG(2);
    TMR_INTR_FLAG_CHECK_HALL(2);
}

void TMR3_GLOBAL_IRQHandler(void)
{
    TMR_INTR_FLAG_CHECK_UPDATE(3);
    TMR_INTR_FLAG_CHECK_TRIG(3);
    TMR_INTR_FLAG_CHECK_HALL(3);
}

void TMR4_GLOBAL_IRQHandler(void)
{
    TMR_INTR_FLAG_CHECK_UPDATE(4);
    TMR_INTR_FLAG_CHECK_TRIG(4);
    TMR_INTR_FLAG_CHECK_HALL(4);
}

void TMR5_GLOBAL_IRQHandler(void)
{
    TMR_INTR_FLAG_CHECK_UPDATE(5);
    TMR_INTR_FLAG_CHECK_TRIG(5);
    TMR_INTR_FLAG_CHECK_HALL(5);
}
#endif
